#ifndef PARAFLUIDSUBSTANCE_H
#define PARAFLUIDSUBSTANCE_H

#include "parafluidcolor.h"

#include <QDataStream>

namespace ParaFluid
{
	
	/**
	* Substance
	*/
	class Substance
	{
		
	public:
		
		/**
		* Destructor
		*/
		virtual ~Substance();
		
		/**
		* Default Constructor
		*/
		Substance();
		
		/**
		* Constructor with members
		*/
		Substance(float Mass, const Color & Color, float PressureFactor, float RestDensity, float ViscosityFactor);
		
		/**
		* Copy Constructor
		*/
		Substance(const Substance & other);
		
		/**
		* Assignment Operator
		*/
		Substance & operator= (const Substance & rhs);
		
		/**
		* Comparison Operator
		*/
		bool operator== (const Substance & rhs) const;
		
		/**
		* Mass
		*/
		float mass;
		
		/**
		* Color
		*/
		Color color;
		
		/**
		* Gas Constant that Depends on Temperature
		*/
		float pressureFactor;
		
		/**
		* Fluid Density at Rest
		*/
		float restDensity;
		
		/**
		* Poise Factor that Depends on Temperature
		*/
		float viscosityFactor;
		
		/**
		* Water
		*/
		static const Substance WATER;
		
	};
	
}

QDataStream & operator<< (QDataStream & stream, const ParaFluid::Substance & substance);

QDataStream & operator>> (QDataStream & stream, ParaFluid::Substance & substance);

#endif

